<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    // A,B,C
    // 同时获取三个异步的数据，可以不分先后

    const p1 = myPromise("A");
    const p2 = myPromise("B");
    const p3 = myPromise("C");

    // 批处理：all的规则为：只要有一个失败，即执行catch，全部成功才执行then
    // const p = Promise.all([p1, p2, p3]);
    // p.then(res=>{
    //     console.log(res);
    // })
    // p.catch(code=>{
    //     console.log(code);
    // })

    // 批处理：race的规则为：只要有一个结束了，不管成功还是失败，race都结束了，如果是成功结束，执行then，如果是失败结束，执行catch
    // const p = Promise.race([p1, p2, p3]);
    // p.then(res=>{
    //     console.log(res);
    // })
    // p.catch(code=>{
    //     console.log(code);
    // })

    // 批处理：any的规则为：只要有一个成功，即执行then，全部失败才执行catch
    // const p = Promise.any([p1, p2, p3]);
    // p.then(res=>{
    //     console.log(res);
    // })
    // p.catch(code=>{
    //     console.log(code);
    // })

    // 批处理：allSettled的规则为：所有的promise都结束。不管是成功还是失败，都会触发then，then的回调函数的参数为每个promise实例的状态和数据
    // const p = Promise.allSettled([p1, p2, p3]);
    // p.then(res=>{
    //     console.log(res)
    //     res.forEach(val=>{
    //         if(val.status === "fulfilled"){
    //             console.log(val.value)
    //         }
    //     })
    // })



    // 正在进行时的promise实例
    // const p = new Promise(()=>{})
    // console.log(p);
        
    // 成功状态的promise实例
    // const p = new Promise((resolve)=>{resolve()})
    // const p = Promise.resolve("hello");
    // console.log(p);
    
    // 失败状态的promise实例
    // const p = new Promise((resolve, reject)=>{reject()})
    // const p = Promise.reject("error");
    // console.log(p);


    function myPromise(mark){
        return new Promise((resolve, reject)=>{
            setTimeout(()=>{
                resolve(mark + "，执行成功");
            }, Math.random()*1000);

            setTimeout(()=>{
                reject(mark + "，执行失败");
            }, Math.random()*1000);
        })
    }
    
</script>
</html>